#include "ConfigBasica.h"
#include <stdexcept>
#include <sstream>
#include <gtkmm/entry.h>
#include <gtkmm/checkbutton.h>


ConfigBasica::ConfigBasica(Glib::RefPtr<Gtk::Builder> b, std::string nomWidget, std::string nomMenuItem,
	Gtk::Window& parentWin)
	: VentanaDialogo(b, nomWidget, nomMenuItem, parentWin)
{
}


ConfigBasica::~ConfigBasica(){
}


// Es la funcion que se ejecuta al aceptar los cambios en el cuadro de dialog
void ConfigBasica::aceptar(){
	// Hay que guardar los parametros en la estructura correspondiente
	obtenerDato("txtMainPort", (*this->_ppconfig)->nroPuerto);
	obtenerDato("txtControlPort", (*this->_ppconfig)->nroPuertoCtrl);
	obtenerDato("txtBaseDir", (*this->_ppconfig)->baseDir);
	obtenerDato("txtConnSim", (*this->_ppconfig)->maxConexionesSimultaneas);
	obtenerDato("txtConnCliente", (*this->_ppconfig)->maxConexionesCliente);
	obtenerDato("txtTimeout", (*this->_ppconfig)->timeout);
	obtenerDato("chkAutenticacion", (*this->_ppconfig)->autenticacionBasica);
}


// Es la funcion que se ejecuta al cancelar el cuadro de dialog
void ConfigBasica::cancelar(){
	// nada
}


void ConfigBasica::setearParametros(){
	// Carga los parametros a cada elemento de la pantalla
	cargarParams("txtMainPort", (*this->_ppconfig)->nroPuerto);
	cargarParams("txtControlPort", (*this->_ppconfig)->nroPuertoCtrl);
	cargarParams("txtBaseDir", (*this->_ppconfig)->baseDir);
	cargarParams("txtConnSim", (*this->_ppconfig)->maxConexionesSimultaneas);
	cargarParams("txtConnCliente", (*this->_ppconfig)->maxConexionesCliente);
	cargarParams("txtTimeout", (*this->_ppconfig)->timeout);
	cargarParams("chkAutenticacion", (*this->_ppconfig)->autenticacionBasica);
}


void ConfigBasica::cargarParams(std::string nomEntry, unsigned short int val){
	std::stringstream ss;
	ss << val;
	cargarParams(nomEntry, ss.str());
}


void ConfigBasica::cargarParams(std::string nomEntry, std::string cadena){
	Gtk::Entry* pEntry = 0;
	this->_builder->get_widget(nomEntry, pEntry);

	if (!pEntry) throw std::runtime_error("Error al buscar '"+nomEntry+"'");

	pEntry->set_text(cadena);
}


void ConfigBasica::cargarParams(std::string nomChk, bool val){
	Gtk::CheckButton* pChk = 0;
	this->_builder->get_widget(nomChk, pChk);

	if (!pChk) throw std::runtime_error("Error al buscar '"+nomChk+"'");

	pChk->set_active(val);
}


void ConfigBasica::obtenerDato(std::string nomEntry, std::string& dato){
	Gtk::Entry* pEntry = 0;
	this->_builder->get_widget(nomEntry, pEntry);

	if (!pEntry) throw std::runtime_error("Error al buscar '"+nomEntry+"'");

	dato =  pEntry->get_text();
}


void ConfigBasica::obtenerDato(std::string nomEntry, unsigned short int& dato){
	std::string s;
	obtenerDato(nomEntry, s);

	std::stringstream ss(s);
	ss >> dato;
}


void ConfigBasica::obtenerDato(std::string nomChk, bool& dato){
	Gtk::CheckButton* pChk = 0;
	this->_builder->get_widget(nomChk, pChk);

	if (!pChk) throw std::runtime_error("Error al buscar '"+nomChk+"'");

	dato = pChk->get_active();
}


